英文原文: Auto Restart application after Crash/Force Close in Android.
手机上的Android应用,经常会出现“Force Close”的错误,这种情况一般是因为代码中没有正确获取到Exceptions。那么如果想让App在出现这种错误崩溃Crash以后自动重启,我们该怎么办呢?
这篇教程我们将学到如何自动处理Exception,并且了解在App Crash以后如何自动重启。
其实方法很简单,这里我们需要用到 Thread.setDefaultUncaughtExceptionHandler(),当应用崩溃的时候代码就会自动调用 uncaughtException() 这个方法。
操作步骤如下:
Step 1
像下面这样创建一个重启目标 Activity 的 Intent,并添加一些 Activity 启动的 Flags:
1 | Intent intent = new Intent(activity, RelaunchActivity.class); |
其中,
Intent.FLAG_ACTIVITY_CLEAR_TOP : 销毁目标Activity和它之上的所有Activity,重新创建目标Activity。
Intent.FLAG_ACTIVITY_CLEAR_TASK : 启动Activity时,清除之前已经存在的Activity实例所在的task,这自然也就清除了之前存在的Activity实例!
Intent.FLAG_ACTIVITY_NEW_TASK : 很少单独使用,通常与FLAG_ACTIVITY_CLEAR_TASK或FLAG_ACTIVITY_CLEAR_TOP联合使用。
Step 2
在 uncaughtException() 方法中,添加如下代码:
1 | PendingIntent pendingIntent = PendingIntent.getActivity( |
这里的 PendingIntent 不同于常见的 Intent ,PendingIntent 是对 Intent 的一个包装,可以保存下来在将来某一刻执行。它存储了request code、intent 和 flags。
AlarmManager 是为了设置一个计时器来延迟两秒再执行 pendingIntent 的,也就是重启我们的Activity的任务。
Step 3
最后,在 Activity 的 onCreate() 方法中调用如下代码:
1 | Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler(this)); |
【完整代码】
YourApplication.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29import android.app.Application;
/**
* This custom class is used to Application level things.
*
* @author Chintan Rathod (http://www.chintanrathod.com)
*/
public class YourApplication extends Application {
private static Context mContext;
public static YourApplication instace;
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
instace = this;
}
public Context getApplicationContext() {
return super.getApplicationContext();
}
public static YourApplication getIntance() {
return instace;
}
}DefaultExceptionHandler.java
1 | import java.io.File; |
【参考资料】: